package com.johnny.xia.util.file;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import com.johnny.xia.util.base.ValidatorUtil;

/**
 * 文件处理相关方法
 * 
 * @author johnnyxia
 *
 */
public class FileUtil {

	/**
	 * 获取指定路径下的所有文件名称（全路径）
	 * 
	 * @param path
	 *            指定目录
	 * @return
	 */
	public static List<String> getAllFile(String path) {
		List<String> result = new ArrayList<String>();
		getFiles(path, result,null);
		return result;
	}

	/**
	 * 获取指定类型的文件名称
	 * @param path
	 * 			目标目录
	 * @param types
	 * 			指定类型列表，里面的类型列表需要是大写
	 * @return
	 */
	public static List<String> getAllFileByType(String path, List<String> types) {
		List<String> result = new ArrayList<String>();
		getFiles(path, result, types);
		return result;
	}

	private static void getFiles(String path, List<String> allFiles, List<String> types) {
		File directory = new File(path);
		if (directory.isDirectory()) {
			File[] childs = directory.listFiles();
			for (File file : childs) {
				if (file.isDirectory()) {
					getFiles(file.getPath(), allFiles, types);
				} else {
					addFileNameToList(file.getPath(), allFiles, types);
				}
			}
		} else {
			addFileNameToList(directory.getPath(), allFiles, types);
		}
	}

	/**
	 * 将文件名称加入结果的list中
	 * 
	 * @param path
	 *            文件路径
	 * @param list
	 *            结果集
	 * @param types
	 *            指定需要加入的类型
	 */
	public static void addFileNameToList(String tmpPath, List<String> allFiles, List<String> types) {
		// 如果没有传类型，那么将文件直接加入返回结果
		// 如果有类型，那么将符合类型的图片加入结果中
		if (ValidatorUtil.isNullOrEmpty(types)) {
			allFiles.add(tmpPath);
		} else {
			String fileType = tmpPath.substring(tmpPath.lastIndexOf(".")+1);
			if (types.contains(fileType.toUpperCase())) {
				allFiles.add(tmpPath);
			}
		}
	}
	
	public static void main(String[] args) {
		String tmpPath="test/test_xjpg";
		String fileType = tmpPath.substring(tmpPath.lastIndexOf(".")+1);
		System.out.println(fileType);
	}
}
